import axios from 'axios' // 引入axios
import { Message } from 'element-ui'
import router from '../router'

// 环境的切换
if (process.env.NODE_ENV == 'development') {
  axios.defaults.baseURL = 'http://192.168.43.158:8088/'
} else if (process.env.NODE_ENV == 'debug') {
  axios.defaults.baseURL = 'http://192.168.43.158:8088/'
} else if (process.env.NODE_ENV == 'production') {
  axios.defaults.baseURL = 'http://39.105.201.210:8088/'
}
// 设置默认的请求超时时间
axios.defaults.timeout = 10000

// 设置post的请求头
axios.defaults.headers.post['Content-Type'] = 'application/json'
// 请求拦截器，在请求头里添加TOKEN
axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) { // 判断是否存在token，如果存在的话，则每个http header都加上token
      config.headers.token = `${token}`
    }
    return config
  },
  err => {
    this.$router.push('/login')
    return Promise.reject(err)
  })

axios.interceptors.response.use(function (response) {
  if (response.status >= 400) {
    localStorage.clear()// 删除已经失效或过期的token（不删除也可以，因为登录后覆盖）
    router.replace({
      path: '/login', // 到登录页重新获取token
      query: {
        // 回到当前页面
        redirect: router.currentRoute.fullPath
      }
    })
  }
  return response
}, function (error) {
  if (error.response) {
    if (error.response.status === 403) {
      Message({
        showClose: true,
        message: '登录过期',
        type: 'error'
      })
      localStorage.clear()
      // Cookies.set("user","",-10);
      router.replace({
        path: '/login' // 到登录页重新获取token
      })
    } else if (error.response.status === 405) {
      Message({
        showClose: true,
        message: '权限不足,请联系管理员',
        type: 'warning'
      })
      router.replace({
        path: '/error'
      })
    } else if (error.response.status === 500) {
      Message({
        showClose: true,
        message: '服务器异常',
        type: 'error'
      })
    }
  }
  return Promise.reject(error)
})
/**
 * post方法，对应post请求
 */
export function post (url, params, config) {
  return new Promise((resolve, reject) => {
    axios.post(url, params, config)
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
/**
 * get方法，对应get请求
 */
export function get (url, params) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    }).then(res => {
      resolve(res.data)
    }).catch(err => {
      reject(err.data)
    })
  })
}
/**
 * delete方法，对应delete请求
 */
// export function delete (url, params) {
//   return new Promise((resolve, reject) => {
//     axios.delete(url, {
//       params: params
//     }).then(res => {
//       resolve(res.data)
//     }).catch(err => {
//       reject(err.data)
//     })
//   })
// }
